In conventional data storage scenarios, particularly in cloud computing and storage, large amounts of data are available that need to be read regularly. In video streaming, social networking websites, wiki pages, bank data, medical imagery storage, etc., an enormous amount of data is read daily. The main aim of storage solutions is to ensure performance. Compromises made for each of the storage redundancy schemes reduces performance. In recent years, caching of data has been widely used to improve the performance of the system. In some conventional systems, read and write data is kept in a cache, so that further read operations can be quickly serviced to a host.
In conventional flash read cache approaches, data is present in the cache, and host input/output requests are serviced immediately. If a cache miss occurs, then the controller searches for the data in an SSD volume. If the data is present in the SSD volume, the requested data is sent to the host. If the data is not in the SSD volume, then the starting logical block addresses (LBAs) are read again from the drive volume and a write operation is performed on a solid state disk volume. The corresponding bitmap in the metadata is updated to indicate that the LBAs are present. This ensures that further read operation on the set of these LBAs are serviced directly from the SSD (i.e., flash) volume rather than the HDD (i.e., fixed) volumes to improve performance.
In existing flash read cache approaches, incoming data is first written onto the controller cache. When the cache is full, the data is flushed onto the fixed drive volumes (i.e., HDD volumes). The data to be written into the flash volume is read from the fixed drive volume. The data is then written onto the flash volume. The corresponding bitmap in the metadata is updated to indicate that the LBAs are present. When the read operation is performed on the same LBAs again, the controller checks if the data is present in the cache. If present, a read command is acknowledged. The data is then read from the flash drive and sent to the host. Since a read from flash is faster than ordinary fixed drive, the time to service the request is reduced, thus improving the performance.
During a read operation, if there is a cache miss, two read operations are performed from the fixed volume. First a read is performed from the fixed volume and is served to the host. Second, a read is performed in order to write the corresponding LBAs to the flash volume.
It would be desirable to implement method to improve the performance of read ahead cache process in a storage array by transferring data directly between a fixed drive volume and a flash drive volume.